Declarative এবং Programmatic Transaction Management

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Transaction Management
200

ডেটাবেসে একাধিক অপারেশন সম্পন্ন করার সময় নিশ্চিত করতে হয় যে, কোনো এক অপারেশনে ত্রুটি ঘটলে অন্য সব অপারেশনও রোলব্যাক (rollback) হবে। এ কাজটি Transaction Management এর মাধ্যমে সম্পন্ন করা হয়। স্প্রিং বুটে Declarative এবং Programmatic দুই পদ্ধতিতেই ট্রানজেকশন ম্যানেজমেন্ট করা যায়।


Transaction Management কি?

Transaction Management হলো ডেটাবেস অপারেশনের একটি নির্দিষ্ট ব্লক যা হয় সফলভাবে সম্পন্ন হবে, নয়ত পুরোপুরি রোলব্যাক করবে। এটি ডেটার অখণ্ডতা (data integrity) এবং সঙ্গতিপূর্ণতা (consistency) নিশ্চিত করে।


Declarative Transaction Management

Declarative Transaction Management-এ ট্রানজেকশন ম্যানেজমেন্ট কনফিগারেশন বা অ্যানোটেশনের মাধ্যমে ডিফাইন করা হয়। এটি সহজ এবং কোড কম লিখতে হয়।

@Transactional অ্যানোটেশন

স্প্রিং বুটে @Transactional অ্যানোটেশন ব্যবহার করে ট্রানজেকশন ডিফাইন করা হয়। এটি ক্লাস বা মেথডের উপর প্রয়োগ করা যায়।

উদাহরণ:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Transactional
    public void createUserAndProfile(User user, Profile profile) {
        userRepository.save(user);
        userRepository.saveProfile(profile);
        // যদি কোনো ত্রুটি ঘটে, তবে উভয় অপারেশন রোলব্যাক হবে।
    }
}

বুঝিয়ে বলি:

  • @Transactional: মেথডে ট্রানজেকশন সংজ্ঞায়িত করে।
  • যদি একটি অপারেশন ব্যর্থ হয়, তবে পুরো ট্রানজেকশন রোলব্যাক হবে।
  • এটি Propagation এবং Isolation Level সেট করতে পারে (ডিফল্ট REQUIRED এবং READ_COMMITTED)।

Propagation Example:

@Transactional(propagation = Propagation.REQUIRED)
public void method() {
    // Required propagation ট্রানজেকশন শেয়ার করে।
}

Programmatic Transaction Management

Programmatic Transaction Management-এ ডেভেলপার নিজের মতো করে কোড লিখে ট্রানজেকশন পরিচালনা করেন। এটি তখনই ব্যবহার করা হয়, যখন ট্রানজেকশনের উপর পূর্ণ নিয়ন্ত্রণ প্রয়োজন।

TransactionTemplate ব্যবহার

স্প্রিং বুটে TransactionTemplate ক্লাস ব্যবহার করে প্রোগ্রাম্যাটিক ট্রানজেকশন তৈরি করা যায়।

উদাহরণ:

import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;

@Service
public class UserService {

    private final UserRepository userRepository;
    private final TransactionTemplate transactionTemplate;

    public UserService(UserRepository userRepository, TransactionTemplate transactionTemplate) {
        this.userRepository = userRepository;
        this.transactionTemplate = transactionTemplate;
    }

    public void createUserAndProfile(User user, Profile profile) {
        transactionTemplate.execute(status -> {
            try {
                userRepository.save(user);
                userRepository.saveProfile(profile);
            } catch (Exception e) {
                status.setRollbackOnly(); // যদি কোনো ত্রুটি ঘটে, ট্রানজেকশন রোলব্যাক হবে।
                throw e;
            }
            return null;
        });
    }
}

বুঝিয়ে বলি:

  • TransactionTemplate.execute(): একটি ট্রানজেকশন ব্লক ডিফাইন করে।
  • status.setRollbackOnly(): ত্রুটি ঘটলে ট্রানজেকশন রোলব্যাক নিশ্চিত করে।

Declarative এবং Programmatic Transaction Management-এর তুলনা

বৈশিষ্ট্যDeclarativeProgrammatic
সহজতাঅ্যানোটেশন ব্যবহার করে সহজে পরিচালনা।কোড বেশি লিখতে হয়।
নিয়ন্ত্রণসীমিত নিয়ন্ত্রণ।সম্পূর্ণ নিয়ন্ত্রণ।
ইউজ কেসসাধারণ ট্রানজেকশন পরিচালনার জন্য।জটিল ট্রানজেকশনের জন্য।
নির্ভরতা@Transactional বা স্প্রিং অ্যানোটেশন।TransactionTemplate বা ম্যানুয়াল মেথড।

কনফিগারেশন: application.properties

ট্রানজেকশন ম্যানেজমেন্ট কার্যকর করার জন্য কিছু গুরুত্বপূর্ণ কনফিগারেশন প্রয়োজন:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.show_sql=true

সারাংশ

Declarative Transaction Management সাধারণ ট্রানজেকশন পরিচালনার জন্য সবচেয়ে উপযুক্ত, কারণ এটি অ্যানোটেশন ব্যবহার করে সহজে পরিচালিত হয়। অন্যদিকে, Programmatic Transaction Management তখন ব্যবহার করা হয়, যখন জটিল বা কাস্টম ট্রানজেকশন লজিক প্রয়োজন। স্প্রিং বুট ORM-এর এই দুই পদ্ধতি ডেভেলপারদের জন্য অত্যন্ত কার্যকরী সমাধান প্রদান করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...